跳到主要内容

spring boot 2.7后不再推荐使用spring.factories自动装配

如果我们打开spring boot github的发版记录。

spring boot 2.7.0-M2-Release的发版记录会发现如下说明

spring-factories-deprecated.png

原文地址

大致意思就是spring boot 2.7之后不再推荐使用spring.factories自动装配。

推荐使用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports来自动装配。

当然为了向后兼容,spring.factories还是会继续支持

spring.factories使用方式

如果经常写spring boot相关的自定义sdk,对spring.factories应该不陌生。

很简单的一个使用场景。

比如我们现在要编写一个sdk 我需要自动装配一些bean。那么如何使用spring.factories实现自动装配呢?

因为我是sdk所以不会被spring boot扫描到,所以我需要在spring.factories中指定bean的全路径。来加载我们的bean

使用方式很简单

  1. 创建配置类
@Configuration(proxyBeanMethods = false)
public class NebulaDistributedLockAutoConfiguration {

@Bean
public RedissonDistributedLockTemplate redissonDistributedLockTemplate(RedissonClient redissonClient) {
RedissonDistributedLockTemplate template = new RedissonDistributedLockTemplate(redissonClient);
return template;
}


}

然后在resources目录下创建META-INF/spring.factories文件,并添加如下内容

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.nebula.distribute.lock.autoconfigure.NebulaDistributedLockAutoConfiguration
  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\是固定格式
  2. com.nebula.distribute.lock.autoconfigure.NebulaDistributedLockAutoConfiguration是我们的配置类全路径

这样我们的NebulaDistributedLockAutoConfiguration即使不在spring boot的扫描路径下,也会被自动装配

spring boot 2.7之后推荐的使用方式

spring boot 2.7之后不再推荐使用spring.factories自动装配。

推荐使用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports来自动装配。

所以我们上面的代码要改成如下

  1. resources新建/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件

然后在文件中添加如下内容

com.nebula.distribute.lock.autoconfigure.NebulaDistributedLockAutoConfiguration

如果我们查看一些开源项目,就可以看到他们的spring.factories文件已经被替换成了org.springframework.boot.autoconfigure.AutoConfiguration.imports文件

比如我们随便看看spirng cloud kubernetes源码

spring-cloud-kubernetes-auto-imports.png

不过值得注意的是他们项目好像也保留了spring.factories文件,可能是为了兼容低版本的spring boot

总结

总的来说spring.factoriesorg.springframework.boot.autoconfigure.AutoConfiguration.imports都是用来自动装配bean的。

spring.factoriesspring boot 2.7之前的推荐使用方式

org.springframework.boot.autoconfigure.AutoConfiguration.importsspring boot 2.7之后的推荐使用方式

所以如果你的项目是spring boot 2.7及之后的版本,建议使用org.springframework.boot.autoconfigure.AutoConfiguration.imports来自动装配bean

可以明显的看到使用org.springframework.boot.autoconfigure.AutoConfiguration.imports更加直观,不需要再去指定EnableAutoConfiguration这个固定的字符串

然后多个配置之间也不用再用,\来换行,直接换行即可